/*
 * 文 件 名:  AlertToast.java
 * 创建日期:  2012-9-28
 * 版    权:  Epro Technologies Co., Ltd. Copyright 2011-2012,  All rights reserved
 * 作    者:  pqp66011
 */
package com.weipu.common.util;

import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RecentTaskInfo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.Toast;

import com.weipu.common.constants.ServerConstant;
import com.weipu.dx_lib.R;

/** 
 * 提示信息类
 * @author pqp66011
 *
 */
public class AlertToast
{
    
    /**
     * Toast 弹出消息  (传入 )
     * @param msg 要显示的字符串
     * @param context 上下文
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, String msg)
    {
        if (isAppOnForeground(context))
        {
            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        }
    }
    
    /**
     * Toast 弹出消息
     * @param msg 要显示的信息
     * @param duration 消息显示时间长度
     * {@link Toast#LENGTH_SHORT}
     * {@link Toast#LENGTH_LONG}
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, String msg, int duration)
    {
        if (isAppOnForeground(context))
        {
            Toast.makeText(context, msg, duration).show();
        }
    }
    
    /**
     *  Toast 弹出消息
     * @param msg [参数说明]
     * @param duration 消息显示时间长度
     * {@link Toast#LENGTH_SHORT}
     * {@link Toast#LENGTH_LONG}
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, Integer resId, int duration)
    {
        if (isAppOnForeground(context))
        {
            // 如果本地没有定义 该异常码，默认为未知异常处理   
            if (null == resId)
            {
                resId = ServerConstant.ReturnCode.MESSAGEMAP.get(ServerConstant.ReturnCode.VALIDATOR_UNKONW_ERROR);
            }
            Toast.makeText(context, context.getString(resId), duration).show();
        }
    }
    
    /**
     * 弹出消息
     * @param resId [参数说明]
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, Integer resId)
    {
        if (isAppOnForeground(context))
        {
            // 如果本地没有定义 该异常码，默认为未知异常处理   
            if (null == resId)
            {
                resId = ServerConstant.ReturnCode.MESSAGEMAP.get(ServerConstant.ReturnCode.VALIDATOR_UNKONW_ERROR);
            }

            Toast.makeText(context, context.getString(resId),Toast.LENGTH_SHORT).show();
        }
    }
    
    /**
     * 弹出消息，并给指定控件已动画提示效果
     * @param resId [参数说明]
     * @param vuew 目标视图
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, int resId, View view)
    {
        if (isAppOnForeground(context))
        {
            view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake));
            Toast.makeText(context, context.getString(resId), Toast.LENGTH_SHORT).show();
        }
    }
    
    /**
     * 弹出消息，并给指定控件已动画提示效果
     * @param resId 
     * @param view 目标视图
     * @param duation 消息显示时间长度
     * @return void [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static void alert(Context context, int resId, View view, int duration)
    {
        if (isAppOnForeground(context))
        {
            view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake));
            Toast.makeText(context, context.getString(resId), duration).show();
        }
    }
    
    /**
    * 弹出消息，并给指定控件已动画提示效果
    * @param resId [参数说明]
    * @return void [返回类型说明]
    * @exception throws [违例类型] [违例说明]
    * @see [类、类#方法、类#成员]
    */
    public static void alert(Context context, String msg, View view)
    {
        if (isAppOnForeground(context))
        {
            view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake));
            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        }
    }
    
    /**
     * 
      * 弹出消息，注：该方法旨在非当前UI线程中调用，例如需要一个后台数据加载线程弹出消息，则可以使用该方法
      * @param msg  [参数说明]
      * @return void [返回类型说明]
      * @exception throws [违例类型] [违例说明]
      * @see [类、类#方法、类#成员]
     */
    public static void alertOnUIThread(final Context context, final String msg)
    {
        ((Activity)context).runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
                Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
            }
        });
    }
    
    /**
      * 判断栈顶是否是当前app
      * @param context
      * @return  [参数说明]
      * @return boolean [返回类型说明]
      * @exception throws [违例类型] [违例说明]
      * @see [类、类#方法、类#成员]
      */
    public static boolean isAppOnForeground(Context context)
    {
    	if(null==context){
    		return false;
    	}
        ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        if(null==activityManager){
        	return false;
        }
        String packageName = context.getPackageName();
        List<RecentTaskInfo> appTask = activityManager.getRecentTasks(Integer.MAX_VALUE, 1);
        
        if (appTask == null||appTask.size()==0)
        {
            return false;
        }
        
        if (appTask.get(0).baseIntent.toString().contains(packageName))
        {
            return true;
        }
        return false;
    }
    
}
